import { roleApi } from '@/api/system'
// 定义一个函数，用于根据角色获取菜单
export async function getMenusByRole2(roleId) {
  try {
    let menus = null
    // 获取角色已有的菜单权限
    const res = await roleApi.getRoleMenuList(roleId)
    // 获取该角色可分配的菜单树
    const menuRes = await roleApi.getRoleMenuTree(0)
    if (menuRes.data) {
      // 将新的数据格式转换为树形结构
      menus = transformMenuData(menuRes.data).filter(m => res.data.includes(m.id))
    }
    console.log('获取菜单配置',menus)
    console.log('获取角色菜单权限', res.data)

    return menus
  } catch (error) {
    ElMessage.error('获取角色菜单权限失败')
  }
}

// 转换菜单数据为树形结构
const transformMenuData = (menuData) => {
  if (!menuData || menuData.length === 0) return []
  
  // 创建一个映射，用于快速查找父节点
  const menuMap = {}
  const rootMenus = []
  
  // 第一步：将所有菜单放入映射
  menuData.forEach(item => {
    const menuItem = {
      id: item.menuId,
      title: item.menuName,
      path: '/'+item.path,
      component: item.component,
      permission: item.permission,
      icon: item.icon,
      parentId: item.parentId,
      menuType: item.menuType,
      sortOrder: item.sortOrder,
      status: item.status,
      children: []
    }
    
    menuMap[item.menuId] = menuItem
  })
  
  // 第二步：构建树形结构
  menuData.forEach(item => {
    const menuItem = menuMap[item.menuId]
    
    if (item.parentId === 0) {
      // 这是一个根菜单
      rootMenus.push(menuItem)
    } else {
      // 这是一个子菜单，将其添加到父菜单的children中
      const parentMenu = menuMap[item.parentId]
      if (parentMenu) {
        parentMenu.children.push(menuItem)
      }
    }
  })
  
  // 根据sortOrder排序
  const sortMenus = (menus) => {
    menus.sort((a, b) => a.sortOrder - b.sortOrder)
    menus.forEach(menu => {
      if (menu.children && menu.children.length > 0) {
        sortMenus(menu.children)
      }
    })
    return menus
  }
  
  return sortMenus(rootMenus)
}